package com.atguigu.lease.web.app.custom.converter;

import com.atguigu.lease.model.enums.BaseEnum;
import org.springframework.core.convert.converter.Converter;
import org.springframework.core.convert.converter.ConverterFactory;
import org.springframework.stereotype.Component;

/**
 * ClassName: StringToBaseEnumConverterFactory
 * Package: com.atguigu.lease.web.admin.custom.converter
 * Description:
 * StringToBaseEnumConverterFactory
 * 处理一类类型转换为 ToBaseEnum 枚举类型 的转换器工厂
 * @Autor: xvyy
 * @Create: 2024/11/16 - 15:37
 * @Version: v1.0
 */
@Component
public class StringToBaseEnumConverterFactory implements ConverterFactory<String , BaseEnum> {
    @Override
    public <T extends BaseEnum> Converter<String, T> getConverter(Class<T> targetType) {

        return source -> {
            //todo Class.getEnumConstants() 方法是 Java 反射 API 中的一个方法，
            // 用于获取表示枚举类型的 Class 对象中所有枚举枚举项
            T[] enumConstants = targetType.getEnumConstants();
            for (T enumConstant : enumConstants) {
                //todo 枚举类型的枚举常量，判断是否与传入的source相等
                if (enumConstant.getCode().equals(Integer.valueOf(source))) {
                    return enumConstant;
                }
            }
            //todo 如果没有匹配到，则抛出异常
            throw new IllegalArgumentException("非法的枚举值:" + source);
        };
        /*new Converter<String, T>() {
            @Override
            public T convert(String source) {
				//Class.getEnumConstants() 方法是 Java 反射 API 中的一个方法，用于获取表示枚举类型的 Class 对象中所有枚举常量的数组
                for (T enumConstant : targetType.getEnumConstants()) {
                    if (enumConstant.getCode().equals(Integer.valueOf(source))) {
                        return enumConstant;
                    }
                }
                throw new IllegalArgumentException("非法的枚举值:" + source);
            }
        };*/

    }
}
